package com.ttg.utils;

//~--- JDK imports ------------------------------------------------------------

import java.util.Random;
import java.util.UUID;

//~--- classes ----------------------------------------------------------------

/**
 * Class IdUtils
 * Description 生成ID
 * Create 2016-07-21 15:52:08
 * @author Ardy
 */
public class IdUtils {

    /**
     * Field i
     * Description 订单号（生成规则：取系统配置文件的instance号2位+12位currentTimeMillis/10(10毫秒)+2位流水号）
     */
    private static int i = 0;

    /**
     * Field instanceId
     * Description
     */
    private static String instanceId ;

    /**
     * Method getInstanceId
     * Description
     *
     * @return String
     */
    public static String getInstanceId() {
        return instanceId;
    }

    /**
     * Method setInstanceId
     * Description
     *
     * @param instanceId String
     */
    public static void setInstanceId(String instanceId) {
        if (( instanceId == null ) || ( instanceId.length() != 2 )) {
            throw new IllegalArgumentException("Set instanceId error: the length should be 2 '"
                    + ( ( instanceId == null ) ? "" : instanceId ) + "' is not correct.");
        }

        IdUtils.instanceId = instanceId;
    }

    /**
     * 图片名生成
     *
     * @return 返回值说明：
     */
    public static String genImageName() {

        // 取当前时间的长整形值包含毫秒
        long millis = System.currentTimeMillis();

        // long millis = System.nanoTime();
        // 加上三位随机数
        Random random = new Random();
        int    end3   = random.nextInt(999);

        // 如果不足三位前面补0
        String str = millis + String.format("%03d", end3);

        return str;
    }

    /**
     * 商品id生成
     *
     * @return 返回值说明：
     */
    public static long genItemId() {

        // 取当前时间的长整形值包含毫秒
        long millis = System.currentTimeMillis();

        // long millis = System.nanoTime();
        // 加上两位随机数
        Random random = new Random();
        int    end2   = random.nextInt(99);

        // 如果不足两位前面补0
        String str = millis + String.format("%02d", end2);
        long   id  = new Long(str);

        return id;
    }


    /**
     * Method genOrdId16
     * Description 每10毫秒可生成100个序列号；优于每毫秒10个序列号
     *
     * @return String
     */
    public synchronized static String genOrdId16() {
        i = i % 100;

        String index    = ( i < 10 ) ? ( "1" + i ) : "" + i;
        String orderNum = instanceId + System.currentTimeMillis() / 10 + index;

        i++;

        return orderNum;
    }

    /**
     * Method main
     * Description 说明：
     *
     * @param args 说明：
     */
    public static void main(String[] args) {
        for (int i = 0 ; i < 100 ; i++) {
            System.out.println(genItemId());
        }
    }

    /**
     * Method getUuid
     * Description 说明：
     *
     * @return 返回值说明：
     */
    public static String getUuid() {
        return UUID.randomUUID().toString().replaceAll("-", "");
    }
}


//~ Formatted by Jindent --- http://www.jindent.com
